From de43e5ca8f5251b136b155f6dc491831123c3286 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Tue, 13 Jun 2023 22:52:48 +0200 Subject: [PATCH] gdk/wayland: Ensure device-added/removed emission in GdkSeat We've used to emit these in the GdkDeviceManager, but missed to do this signal emission at the GdkSeat object level. In order to avoid the double emission, trigger one from the other. Forwarded: https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/6049 Origin: 3.24.39, commit:81029b824b39122704a9bd615dc7b03886516843 Gbp-Pq: Name gdk-wayland-Ensure-device-added-removed-emission-in-GdkSe.patch --- gdk/wayland/gdkdevice-wayland.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/gdk/wayland/gdkdevice-wayland.c b/gdk/wayland/gdkdevice-wayland.c index 7e7beac9d1..dd7db81cf1 100644 --- a/gdk/wayland/gdkdevice-wayland.c +++ b/gdk/wayland/gdkdevice-wayland.c @@ -5181,6 +5181,22 @@ init_pointer_data (GdkWaylandPointerData *pointer_data, master); } +static void +device_manager_device_added (GdkDeviceManager *device_manager, + GdkDevice *device, + GdkSeat *seat) +{ + g_signal_emit_by_name (seat, "device-added", device); +} + +static void +device_manager_device_removed (GdkDeviceManager *device_manager, + GdkDevice *device, + GdkSeat *seat) +{ + g_signal_emit_by_name (seat, "device-removed", device); +} + void _gdk_wayland_device_manager_add_seat (GdkDeviceManager *device_manager, guint32 id, @@ -5249,6 +5265,11 @@ _gdk_wayland_device_manager_add_seat (GdkDeviceManager *device_manager, seat); } + g_signal_connect (seat->device_manager, "device-added", + G_CALLBACK (device_manager_device_added), seat); + g_signal_connect (seat->device_manager, "device-removed", + G_CALLBACK (device_manager_device_removed), seat); + gdk_display_add_seat (display, GDK_SEAT (seat)); } @@ -5268,6 +5289,12 @@ _gdk_wayland_device_manager_remove_seat (GdkDeviceManager *manager, if (seat->id != id) continue; + g_signal_handlers_disconnect_by_func (manager, + device_manager_device_added, + seat); + g_signal_handlers_disconnect_by_func (manager, + device_manager_device_removed, + seat); gdk_display_remove_seat (display, GDK_SEAT (seat)); break; } -- 2.30.2